// Fill out your copyright notice in the Description page of Project Settings.

#pragma once
#include "GameplayTagContainer.h"


/**
 * GameplayTags 标签 单例模式  
 * 内部包含 Native标签
 *
 * 静态单例模式: 不依赖对象生命周期,Gameplay Tags 是一种全局性的数据，不依赖于任何特定对象的生命周期
 * 
 */
struct FAuraGameplayTags
{
	/** 获取单例原生标签结构体对象 */
	static const FAuraGameplayTags& Get() { return AuraGameplayTags; }

	/** 静态原生标签结构体对象 */
	static FAuraGameplayTags AuraGameplayTags;

	/** 伤害类型标签和对应伤害抵抗标签的映射 */
	TMap<FGameplayTag, FGameplayTag> DamageTypesToResistanceMap;


	// ----------------------------------------------------------------------------------------------------------------
	//	标签管理器注册标签
	// ----------------------------------------------------------------------------------------------------------------

	/** 初始化属性标签 */
	static void InitNativeAttributeGameplayTags();

	/** 初始化输入标签 */
	static void InitNativeInputGameplayTags();

	/** 初始化游戏标签 */
	static void InitNativeGameplayTags();


	// ----------------------------------------------------------------------------------------------------------------
	//	主要属性标签
	// ----------------------------------------------------------------------------------------------------------------

	FGameplayTag Attributes_Primary_Strength;
	FGameplayTag Attributes_Primary_Intelligence;
	FGameplayTag Attributes_Primary_Resilience;
	FGameplayTag Attributes_Primary_Vigor;

	// ----------------------------------------------------------------------------------------------------------------
	//	次要属性标签
	// ----------------------------------------------------------------------------------------------------------------

	FGameplayTag Attributes_Secondary_MaxHealth;
	FGameplayTag Attributes_Secondary_MaxMana;
	FGameplayTag Attributes_Secondary_Armor;
	FGameplayTag Attributes_Secondary_ArmorPenetration;
	FGameplayTag Attributes_Secondary_BlockChance;
	FGameplayTag Attributes_Secondary_CriticalHitChance;
	FGameplayTag Attributes_Secondary_CriticalHitDamage;
	FGameplayTag Attributes_Secondary_CriticalHitResistance;
	FGameplayTag Attributes_Secondary_HealthRegeneration;
	FGameplayTag Attributes_Secondary_ManaRegeneration;


	// ----------------------------------------------------------------------------------------------------------------
	//	元属性标签
	// ----------------------------------------------------------------------------------------------------------------

	/** 元属性经验 标签 */
	FGameplayTag Attributes_Meta_IncomingXP;

	// ----------------------------------------------------------------------------------------------------------------
	//	输入标签
	// ----------------------------------------------------------------------------------------------------------------

	FGameplayTag InputTag_LMB;
	FGameplayTag InputTag_RMB;
	FGameplayTag InputTag_1;
	FGameplayTag InputTag_2;
	FGameplayTag InputTag_3;
	FGameplayTag InputTag_4;

	// ----------------------------------------------------------------------------------------------------------------
	//	伤害类标签
	// ----------------------------------------------------------------------------------------------------------------

	/** 伤害标签 */
	FGameplayTag Damage;

	/** 火属性伤害标签 */
	FGameplayTag Damage_Fire;

	/** 电属性伤害标签 */
	FGameplayTag Damage_Lightning;

	/** 魔法属性伤害标签 */
	FGameplayTag Damage_Arcane;

	/** 物理属性伤害标签 */
	FGameplayTag Damage_Physical;

	// ----------------------------------------------------------------------------------------------------------------
	//	抗性类标签 
	// ----------------------------------------------------------------------------------------------------------------

	/** 火属性攻击抗性标签 */
	FGameplayTag Attributes_Resistance_Fire;

	/** 雷属性攻击抗性标签 */
	FGameplayTag Attributes_Resistance_Lightning;

	/** 魔法属性攻击抗性标签 */
	FGameplayTag Attributes_Resistance_Arcane;

	/** 物理属性攻击抗性标签 */
	FGameplayTag Attributes_Resistance_Physical;

	// ----------------------------------------------------------------------------------------------------------------
	//	战斗相关标签
	// ----------------------------------------------------------------------------------------------------------------

	/** 受击标签 */
	FGameplayTag Effect_HitReact;
	
	/** 使用武器部位攻击标签 */
	FGameplayTag CombatSocket_Weapon;

	/** 左手部位攻击标签 */
	FGameplayTag CombatSocket_RightHand;

	/** 右手部位攻击标签 */
	FGameplayTag CombatSocket_LeftHand;

	// ----------------------------------------------------------------------------------------------------------------
	//	技能标签
	// ----------------------------------------------------------------------------------------------------------------

	/** 技能攻击标签 */
	FGameplayTag Abilities_Attack;

	/** 火球术技能标签 */
	FGameplayTag Abilities_Fire_FireBolt;

	/** 召唤技能标签 */
	FGameplayTag Abilities_Summon;
	
	// ----------------------------------------------------------------------------------------------------------------
	//	其他标签
	// ----------------------------------------------------------------------------------------------------------------

	/** 火球术冷却标签 */
	FGameplayTag CoolDown_Fire_FireBolt;
	
	/** 攻击蒙太奇标签 */
	FGameplayTag Montage_Attack_1;
	FGameplayTag Montage_Attack_2;
	FGameplayTag Montage_Attack_3;
	FGameplayTag Montage_Attack_4;
};
